package review.Day_0329;

/**
 * @author zxc
 * @date 2023/03/29 16:53
 **/
public class Solution03 {
    public boolean isAlienSorted(String[] words, String order) {
        int[] arr = new int[26];
        // 字母表中，优先级最高的，其值最小;
        for(int i = 0 ; i < 26 ; i++){
            // arr数组，用来存储每个字母所对应的优先级;
            arr[order.charAt(i) - 'a'] = i;
        }
        // 遍历words字符串数组;
        for(int i = 1 ; i < words.length ; i++){
            boolean flag = false;
            String preStr = words[i - 1];
            String nowStr = words[i];
            // 比较两个字符串中所有字符
            for(int j = 0 ; j < preStr.length() && j < nowStr.length() ; j++){
                // 对于着两个字符串来说，其是不按照字典顺序来进行排序的;
                if(arr[preStr.charAt(j) - 'a'] > arr[nowStr.charAt(j) - 'a']){
                    // 直接返回结果
                    return false;
                }
                // 对于这两个字符串来说，其是按照字典顺序来进行排序的;
                else if(arr[preStr.charAt(j) - 'a'] < arr[nowStr.charAt(j) - 'a']){
                    // 直接对于字符数组words中后面两个字符串进行比较即可;
                    flag = true;
                    break;
                }
            }
            // 有且仅有在前面两个字符串前面字符相同的情况;
            if(!flag){
                if(preStr.length() > nowStr.length()){
                    return false;
                }
            }
        }
        // 遍历完整个字符数组words后，还未返回false的话，代表该字符数组都是按照字典顺序来进行排序的;
        return true;
    }
}
